package com.ushine.web.component.page;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.annotation.PostConstruct;

/**
 * 功能描述:
 * 〈分页请求,参数采用键值对封装〉
 *
 * @author : yls
 * @date : 2020/07/19 10:59
 */
@Data
@ApiModel(description = "分页请求封装")
public class PageRequestQuery<T> {
    /**
     * 当前页码
     */
    @ApiModelProperty("当前页码")
    private Integer pageNum = 0;
    /**
     * 每页数量
     */
    @ApiModelProperty("每页数量")
    private Integer pageSize = 0;
    /**
     * 查询参数
     */
    @ApiModelProperty("查询参数")
    private T params;


    @PostConstruct
    public void init() {
        /*
         * 前台页面的页码是从1开始的，后台jpa封装的页码是从0开始的，所以减1
         * 但是页码最小为 0 ，不能为负数
         */
        this.pageNum = Math.max(this.pageNum - 1, 0);
        /*
         * 分页大小最小为 1
         */
        this.pageSize = Math.max(this.pageSize, 1);
        /*
         * 分页大小最大为 1000
         */
        this.pageSize = Math.min(this.pageSize, 1000);
    }


    /**
     * 功能描述:
     * 〈获取当前的页码：前台页面的页码是从1开始的，后台jpa封装的页码是从0开始的，所以减1〉
     *
     * @param
     * @return : int
     * @author : yls
     * @date : 2020/10/14 9:48
     */
    public Integer getPageNum() {
        return pageNum + 1;
    }

    public void setPageNum(int pageNum) {

        /**
         * 前台页面的页码是从1开始的，后台jpa封装的页码是从0开始的，所以减1
         * 但是页码最小为 0 ，不能为负数
         */
        this.pageNum = Math.max(pageNum - 1, 0);
    }


    /**
     * 功能描述:
     * 〈获取每页的显示数据：为了安全考虑，每页的最大数量为1000，
     * 如果每页的数据超过1000条，默认只显示1000条〉
     *
     * @param
     * @return : int
     * @author : yls
     * @date : 2020/10/14 10:14
     */
    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(int pageSize) {
        /**
         * 分页大小最小为 1
         */
        this.pageSize = Math.max(pageSize, 1);
        /**
         * 分页大小最大为 1000
         */
        this.pageSize = Math.min(this.pageSize, 1000);
    }

    /*
     * 功能描述:
     * 〈分页的额外条件：该获取的查询条件不要直接使用与数据查询
     * 不然可能出现sql注入风险，可以使用
     * 方法转换后使用
     * 〉
     *
     * @param
     * @return : java.util.List<com.authority.manager.base.page.ParamsQuery>
     * @author : yls
     * @date : 2020/10/14 10:11
     */
}
